/**
 * 路由解析器
 * 
 * 根据路由字符串找到对应的处理函数
 */

const fs = require('fs');
const path = require('path');

// 路由映射缓存
const routeCache = new Map();

/**
 * 解析路由，获取对应的处理函数
 * @param {String} route - 路由字符串，格式：'module/action'
 * @returns {Function|null} 处理函数或null
 */
function resolve(route) {
    if (!route || typeof route !== 'string') {
        console.error('[Router] 无效的路由:', route);
        return null;
    }
    
    // 检查缓存
    if (routeCache.has(route)) {
        return routeCache.get(route);
    }
    
    // 解析路由格式
    const parts = route.trim().toLowerCase().split('/');
    if (parts.length < 2) {
        console.error('[Router] 路由格式错误:', route);
        return null;
    }
    
    // 提取模块和操作名
    const module = parts[0];
    const action = parts[1];
    
    try {
        // 尝试加载控制器
        let controller = null;
        
        // 主要模块检测
        if (module === 'plm') {
            // PLM特定模块
            const plmController = require('../../project/plm/controller/plm_controller');
            controller = plmController;
        } else {
            // 尝试从通用控制器目录加载
            try {
                controller = require(`../../controller/${module}_controller`);
            } catch (e) {
                try {
                    // 尝试从项目控制器目录加载
                    controller = require(`../../project/${module}/controller/${module}_controller`);
                } catch (e2) {
                    console.error(`[Router] 未找到控制器: ${module}_controller`);
                    return null;
                }
            }
        }
        
        // 查找处理函数
        if (controller && typeof controller[action] === 'function') {
            // 找到处理函数，缓存并返回
            const handler = controller[action];
            routeCache.set(route, handler);
            console.log(`[Router] 路由'${route}'已匹配到处理函数'${action}'`);
            return handler;
        }
        
        console.error(`[Router] 控制器'${module}'中未找到方法'${action}'`);
        return null;
        
    } catch (error) {
        console.error(`[Router] 解析路由'${route}'失败:`, error);
        return null;
    }
}

/**
 * 清除路由缓存
 */
function clearCache() {
    routeCache.clear();
    console.log('[Router] 路由缓存已清除');
}

module.exports = {
    resolve,
    clearCache
}; 